package it.ap.sa.core.utils;

import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * @author Alessandro Paolillo
 */
public class AuthUtils {
	
	private static CoreProperties property = SpringContextProvider.getApplicationContext().getBean(CoreProperties.class);
    
	/**
	 * Restituisce l'username dell'utente autenticato, altrimenti .
	 * 
	 * @return
	 */
	public static String getLoggedUsername() {
    	/**
		 * Recupero i dati dell'utente autenticato 
		 */
		Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
		
		if(authentication != null && authentication.getPrincipal() instanceof UserDetails) {
		    // get username dall'oggetto in sessione
			return ((UserDetails) authentication.getPrincipal()).getUsername();
		}
		else{
			/** Utente autenticato non trovato, controllo se lanciare l'eccezione o definirne uno di default **/
			if(property.revisionLaunchExceptionUsername)
			   // launch exception
			   throw new IllegalStateException(property.revisionExceptionMessage);
			else
			   /** Stringa di default da usare quando non viene trovato l'utente autenticato. **/
			   return property.revisionDefaultUsername;
		}
    }
	
}
